/*
	File:		Game.h
	Author:		dmonroe
	Date:		11/10/2012
	Copyright:	Full Sail University

	Purpose:	Initialize the hardware wrappers and game states
*/

#ifndef GAME_H
#define GAME_H


// Forward declarations
class IAudio;
class IGraphics;
class IInput;
class CWorld;
class IGameStateMachine;



class CGame
{
public:
	// SINGLETON
	static CGame*		GetInstance		( void );
	static void			DeleteInstance	( void );

	// SETUP
	bool				Initialize		( void );
	bool				Terminate		( void );
	
	// FRAME UPDATE
	unsigned int		Update			( void );

private:
	// SINGLETON
	static CGame*		s_Instance;

	CGame ( void );								// Default constructor
	~CGame( void );								// Destructor
	CGame				( const CGame& );		// Copy constructor
	CGame&	operator=	( const CGame& );		// Assignment operator

		
	// Wrappers
	IAudio*				m_pAudio;
	IGraphics*			m_pGraphics;
	IInput*				m_pInput;

	// World data
	CWorld*				m_pWorld;

	// Game time
	unsigned long		m_ulGameTime;			// Current time in milliseconds

	// Game state machine
	IGameStateMachine*	m_pStateMachine;
};

#endif //GAME_H
